Multi-label confusion matrix
https://scikit-learn.org/stable/modules/model_evaluation.html#multilabel-confusion-matrix
multilabelは各クラスについて2値分類
→各クラスのconfusion matrixが書ける
Random forestでmultilabelで使ったmultilabel_confusion_matrix
sklearn.metrics.confusion_matrix自体はマルチクラスに対応している(3×3以上)
multilabel_confusion_matrixの返り値のarrayからrecallなどを計算する例
各クラスのrecallを計算
code:python
>> import numpy as np
>> from sklearn.metrics import multilabel_confusion_matrix
>> y_true = np.array([0, 0, 1,
... 0, 1, 0,
... 1, 1, 0])
>> y_pred = np.array([0, 1, 0,
... 0, 0, 1,
... 1, 1, 0])
>> mcm = multilabel_confusion_matrix(y_true, y_pred)
>> mcm.shape # (n_outputs, 2, 2) (sample-wiseのときはn_outputs = n_samples)
(3, 2, 2)
>> # p/nは予測。t/fは予測と実際を比較して付く
>> tn = mcm:, 0, 0 # shapeは(3,)
>> fp = mcm:, 0, 1 # インデックス1が0は実際がnegative、インデックス2が1はpositiveと予測
>> fn = mcm:, 1, 0 # インデックス1が1は実際がpositive、インデックス2が0はnegativeと予測
>> tp = mcm:, 1, 1
>> tp / (tp + fn) # 各クラスのrecall(実際はpositiveに着目し、どれだけpositiveと予測されたか)
array(1. , 0.5, 0. )